首先,看到這個標題,沒接觸過Javascript的朋友們腦袋一定有個問號,那就是this是甚麼呢? 這個看似簡單的英文單字,可是Js裡面非常重要的觀念!而在這之前我們要了解物件方法是甚麼,就可以知道到this是如何運作的,呼叫方法時出來的值會是甚麼,讓我們先來看看物件方法吧!
在前面的文章中提過物件的屬性,白話點來說物件就像我們現實生活中事物,像是人會有身高、體重,車子會有型號、顏色、廠牌等等,而今天我們要新增方法的話,就是透過物件去呼叫這個方法,例如:
物件方法
定義一個物件
const person = {
name: "jason",
};
今天要在person這個物件裡增加方法(動作),就是所謂的物件方法。
const person = {
name: "jason",
};
person.action = function () {
console.log("hello,jason");
};
person.action(); //hello,jason
如果覺得這樣看起來很複雜的話,其實跟以下的程式碼是同個意思。
const person = {
name: "jason",
action: function () {
console.log("hello,jason");
},
};
person.action();
this
介紹完了物件方法(函數)以後,我們就要來看this是做甚麼用的,如果我今天想要在方法裡面存取物件(person)自身的內容,這時候this就必須要大顯神威拉!this的功用就是在物件方法中存取物件本身的屬性。
範例:
const person = {
name: "jason",
action: function () {
console.log("hello,my name is " + this.name);
},
};
person.action();
這個例子讓我們了解到這時候的this其實就是物件(person)本身,那為甚麼this會是person物件,因為我們看到最後一行,呼叫action方法的物件就是person物件,造成這邊的this就是person物件。
下面這個例子可以讓我們更加理解,不同的物件呼叫同個方法會有甚麼結果。
範例:
const person1 = {
name: "jason",
};
const person2 = {
name: "leo",
};
function action() {
console.log("hello,my name is " + this.name);
}
person1.action = action;
person2.action = action;
person1.action(); //hello,my name is jason
person2.action(); //hello,my name is leo
雖然都是this.name,但透過不同的物件(person1、person2)呼叫,儘管是同個方法,可就會是不同的結果。會依造你呼叫的物件所決定。
介紹完對this的用法,有沒有稍微更了解一點呢?下一篇我們要繼續介紹箭頭函數。